home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 334_03 / tek.trm < prev    next >
Text File  |  1991-02-04  |  7KB  |  346 lines

  1. /* GNUPLOT - tek.trm */
  2. /*
  3.  * Copyright (C) 1990   
  4.  *
  5.  * Permission to use, copy, and distribute this software and its
  6.  * documentation for any purpose with or without fee is hereby granted, 
  7.  * provided that the above copyright notice appear in all copies and 
  8.  * that both that copyright notice and this permission notice appear 
  9.  * in supporting documentation.
  10.  *
  11.  * Permission to modify the software is granted, but not the right to
  12.  * distribute the modified code.  Modifications are to be distributed 
  13.  * as patches to released version.
  14.  *  
  15.  * This software  is provided "as is" without express or implied warranty.
  16.  * 
  17.  * This file is included by ../term.c.
  18.  *
  19.  * This terminal driver supports:
  20.  *  tek40xx, bitgraph, kermit_color_tek40xx, kermit_mono_tek40xx, selanar
  21.  *
  22.  * AUTHORS
  23.  *   Colin Kelley, Thomas Williams, Russell Lang
  24.  * 
  25.  * send your comments or suggestions to (pixar!info-gnuplot@sun.com).
  26.  * 
  27.  */
  28.  
  29. #ifdef TEK
  30.  
  31. #define TEK40XMAX 1024
  32. #define TEK40YMAX 780
  33.  
  34. #define TEK40XLAST (TEK40XMAX - 1)
  35. #define TEK40YLAST (TEK40YMAX - 1)
  36.  
  37. #define TEK40VCHAR        25
  38. #define TEK40HCHAR        14
  39. #define TEK40VTIC        11
  40. #define TEK40HTIC        11    
  41.  
  42. #define HX 0x20        /* bit pattern to OR over 5-bit data */
  43. #define HY 0x20
  44. #define LX 0x40
  45. #define LY 0x60
  46.  
  47. #define LOWER5 31
  48. #define UPPER5 (31<<5)
  49.  
  50.  
  51. TEK40init()
  52. {
  53. }
  54.  
  55.  
  56. TEK40graphics()
  57. {
  58. #ifdef vms
  59.     term_pasthru();
  60. #endif /* vms */
  61.     fprintf(outfile,"\033\014");
  62. /*                   1
  63.     1. clear screen
  64. */
  65.     (void) fflush(outfile);
  66.     sleep(1);  
  67.     /* sleep 1 second to allow screen time to clear on real 
  68.        tektronix terminals */
  69. }
  70.  
  71. TEK40text()
  72. {
  73.     TEK40move(0,12);
  74.     fprintf(outfile,"\037");
  75. /*                   1
  76.     1. into alphanumerics
  77. */
  78. #ifdef vms
  79.     term_nopasthru();
  80. #endif /* vms */
  81. }
  82.  
  83.  
  84. TEK40linetype(linetype)
  85. int linetype;
  86. {
  87. }
  88.  
  89. TEK40move(x,y)
  90. unsigned int x,y;
  91. {
  92.     (void) putc('\035', outfile);    /* into graphics */
  93.     TEK40vector(x,y);
  94. }
  95.  
  96.  
  97. TEK40vector(x,y)
  98. unsigned int x,y;
  99. {
  100.     (void) putc((HY | (y & UPPER5)>>5), outfile);
  101.     (void) putc((LY | (y & LOWER5)), outfile);
  102.     (void) putc((HX | (x & UPPER5)>>5), outfile);
  103.     (void) putc((LX | (x & LOWER5)), outfile);
  104. }
  105.  
  106.  
  107. TEK40put_text(x,y,str)
  108. unsigned int x,y;
  109. char str[];
  110. {
  111.     TEK40move(x,y-11);
  112.     fprintf(outfile,"\037%s\n",str);
  113. }
  114.  
  115.  
  116. TEK40reset()
  117. {
  118. }
  119.  
  120. #endif /* TEK */
  121.  
  122.  
  123.  
  124. /* thanks to dukecdu!evs (Ed Simpson) for the BBN BitGraph driver */
  125.  
  126. #ifdef BITGRAPH
  127.  
  128. #define BG_XMAX                 768 /* width of plot area */
  129. #define BG_YMAX                 768 /* height of plot area */
  130. #define BG_SCREEN_HEIGHT    1024 /* full screen height */
  131.  
  132. #define BG_XLAST     (BG_XMAX - 1)
  133. #define BG_YLAST     (BG_YMAX - 1)
  134.  
  135. #define BG_VCHAR    16
  136. #define BG_HCHAR     9
  137. #define BG_VTIC         8
  138. #define BG_HTIC         8    
  139.  
  140.  
  141. #define BG_init TEK40init
  142.  
  143. #define BG_graphics TEK40graphics
  144.  
  145.  
  146. #define BG_linetype TEK40linetype
  147.  
  148. #define BG_move TEK40move
  149.  
  150. #define BG_vector TEK40vector
  151.  
  152.  
  153. BG_text()
  154. {
  155.     BG_move(0, BG_SCREEN_HEIGHT - 2 * BG_VCHAR);
  156.     fprintf(outfile,"\037");
  157. /*                   1
  158.     1. into alphanumerics
  159. */
  160. }
  161.  
  162.  
  163. BG_put_text(x,y,str)
  164. unsigned int x,y;
  165. char str[];
  166. {
  167.     BG_move(x,y-11);
  168.     fprintf(outfile,"\037%s\n",str);
  169. }
  170.  
  171.  
  172. #define BG_reset TEK40reset
  173.  
  174. #endif /* BITGRAPH */
  175.  
  176.  
  177. /* Color and Monochrome specials for the MS-Kermit Tektronix Emulator
  178.    by Russell Lang,  eln272v@monu1.cc.monash.oz  */
  179.  
  180. #ifdef KERMIT
  181.  
  182. #define KTEK40HCHAR        13
  183.  
  184. KTEK40graphics()
  185. {
  186. #ifdef vms
  187.         term_mode_tek();
  188.     term_pasthru();
  189. #endif /* vms */
  190.     fprintf(outfile,"\033\014");
  191. /*                   1
  192.     1. clear screen
  193. */
  194.     /* kermit tektronix emulation doesn't need to wait */
  195. }
  196.  
  197. KTEK40Ctext()
  198. {
  199.     TEK40text();
  200.     KTEK40Clinetype(0);  /* change to green */
  201. #ifdef vms
  202.     term_nopasthru();
  203. #endif /* vms */
  204. }
  205.  
  206. /* special color linetypes for MS-DOS Kermit v2.31 tektronix emulator */
  207. /*    0 = normal, 1 = bright 
  208.     foreground color (30-37) = 30 + colors
  209.         where colors are   1=red, 2=green, 4=blue */
  210. static char *kermit_color[15]= {"\033[0;37m","\033[1;30m",
  211.         "\033[0;32m","\033[0;36m","\033[0;31m","\033[0;35m",
  212.         "\033[1;34m","\033[1;33m","\033[1;31m","\033[1;37m",
  213.         "\033[1;35m","\033[1;32m","\033[1;36m","\033[0;34m",
  214.         "\033[0;33m"};
  215.  
  216. KTEK40Clinetype(linetype)
  217. int linetype;
  218. {
  219.     if (linetype >= 13)
  220.         linetype %= 13;
  221.     fprintf(outfile,"%s",kermit_color[linetype+2]);
  222. }
  223.  
  224.  
  225. /* linetypes for MS-DOS Kermit v2.30 tektronix emulator */
  226. /* `=solid, a=fine dots, b=short dashes, c=dash dot, 
  227.    d=long dash dot, e=dash dot dot */
  228. static char *kerm_linetype = "`a`abcde" ;
  229.  
  230. KTEK40Mlinetype(linetype)
  231. int linetype;
  232. {
  233.     if (linetype >= 6)
  234.         linetype %= 6;
  235.     fprintf(outfile,"\033%c",kerm_linetype[linetype+2]);
  236. }
  237.  
  238. KTEK40reset()
  239. {
  240.     fprintf(outfile,"\030\n");  /* turn off Tek emulation */
  241. #ifdef vms
  242.     term_mode_native();
  243. #endif /* vms */
  244. }
  245.  
  246. #endif /* KERMIT */
  247.  
  248.  
  249. /* thanks to sask!macphed (Geoff Coleman and Ian Macphedran) for the
  250.    Selanar driver */
  251.  
  252. #ifdef SELANAR
  253.  
  254. SEL_init()
  255. {
  256.     fprintf(outfile,"\033\062");
  257. /*                    1
  258.     1. set to ansi mode
  259. */
  260. }
  261.  
  262.  
  263. SEL_graphics()
  264. {
  265.     fprintf(outfile,"\033[H\033[J\033\061\033\014");
  266. /*                   1           2       3
  267.     1. clear ANSI screen
  268.     2. set to TEK mode
  269.     3. clear screen
  270. */
  271. }
  272.  
  273.  
  274. SEL_text()
  275. {
  276.     TEK40move(0,12);
  277.     fprintf(outfile,"\033\062");
  278. /*                   1
  279.     1. into ANSI mode
  280. */
  281. }
  282.  
  283. SEL_reset()
  284. {
  285.     fprintf(outfile,"\033\061\033\012\033\062\033[H\033[J");
  286. /*                   1        2       3      4
  287. 1       set tek mode
  288. 2       clear screen
  289. 3       set ansi mode
  290. 4       clear screen
  291. */
  292. }
  293. #endif /* SELANAR */
  294.  
  295. #ifdef VTTEK
  296.  
  297. VTTEK40init()
  298. {
  299.         fprintf(outfile,"\033[?38h");
  300.         fflush(outfile);
  301.         sleep(1);
  302.         /* sleep 1 second to allow screen time to clear on some terminals */
  303. #ifdef vms
  304.         term_mode_tek();
  305. #endif /* vms */
  306. }
  307.  
  308. VTTEK40reset()
  309. {
  310.         fprintf(outfile,"\033[?38l");
  311.         fflush(outfile);
  312.         sleep(1);
  313.         /* sleep 1 second to allow screen time to clear on some terminals */
  314. #ifdef vms
  315.         term_mode_native();
  316. #endif /* vms */
  317. }
  318.  
  319. /* linetypes for VT-type terminals in tektronix emulator mode */
  320. /* `=solid, a=fine dots, b=short dashes, c=dash dot,
  321.    d=long dash dot, h=bold solid, i=bold fine dots, j=bold short dashes,
  322.    k=bold dash dot, l=bold long dash dot */
  323. static char *vt_linetype = "`a`abcdhijkl" ;
  324. static int last_vt_linetype = 0;
  325. VTTEK40linetype(linetype)
  326. int linetype;
  327. {
  328.         if (linetype >= 10)
  329.                 linetype %= 10;
  330.         fprintf(outfile,"\033%c",vt_linetype[linetype+2]);
  331.         last_vt_linetype = linetype;
  332. }
  333.  
  334. VTTEK40put_text(x,y,str)
  335. unsigned int x,y;
  336. char str[];
  337. {
  338.         int linetype;
  339.         linetype = last_vt_linetype;
  340.         VTTEK40linetype(0);
  341.         TEK40put_text(x,y,str);
  342.         VTTEK40linetype(linetype);
  343. }
  344.  
  345. #endif /* VTTEK */
  346.